﻿using System;

namespace SeoulOpenApi.Food
{
	/// <summary>
	/// 서울시 Open API 식품 위생 정보
	/// </summary>
	public class FoodService : BaseService
	{
		/// <summary>
		/// 서울시 API 서비스
		/// </summary>
		public FoodService() : this(null, null) { }

		/// <summary>
		/// 서울시 API 서비스
		/// </summary>
		/// <param name="userId">서울시 API접속 ID</param>
		/// <param name="authKey">서울시로부터 발급받은 인증키</param>
		/// <remarks>인증키 발급: http://mobile.openapi.seoul.go.kr/ </remarks>
		public FoodService(string userId, string authKey)
		{
			base.UserID = userId;
			base.AuthKey = authKey;
		}

		/// <summary>
		/// 서비스 항목에 따라 데이터 가져오기
		/// </summary>
		/// <param name="name">서비스명</param>
		/// <returns></returns>
		protected override SoapData getSoapData(string name)
		{
			var soap = new SoapData { Address = new Uri(ApiUrlPrefix + "FoodService?wsdl", UriKind.Absolute) };
			switch (name)
			{
				case "ListFsiCode":
					soap.Name = "ListFsiCode";
					soap.Description = "식품관련 코드 조회";
					soap.SoapBody = "<ns:ListFsiCode xmlns:ns='http://service.food.openapi.ubizvalley.com'>" +
									"<ns:uk>{0}</ns:uk>" + // 변수: 단말기 Unique값[필수]
									"<ns:grp_code>{1}</ns:grp_code>" + // 변수: 그룹코드[필수]
									"</ns:ListFsiCode>";
					break;
				case "ListFsiDisposition":
					soap.Name = "ListFsiDisposition";
					soap.Description = "행청처분 업체 정보조회";
					soap.SoapBody = "<ns:ListFsiDisposition xmlns:ns='http://service.food.openapi.ubizvalley.com'>" +
									"<ns:uk>{0}</ns:uk>" + // 변수: 단말기 Unique값[필수]
									"<ns:frnum>{1}</ns:frnum>" + // 변수: 총건수중 시작건수[필수]
									"<ns:tonum>{2}</ns:tonum>" + // 변수: 충건수중 종료건수[필수]
									"<ns:gu_code>{3}</ns:gu_code>" + // 변수: 구코드
									"<ns:sname>{4}</ns:sname>" + // 변수: 업소명검색
									"<ns:stype>{5}</ns:stype>" + // 변수: 업체분류코드
									"</ns:ListFsiDisposition>";
					break;
				case "ListFsiInternetInfo":
					soap.Name = "ListFsiInternetInfo";
					soap.Description = "인터넷 자율업체 정보조회";
					soap.SoapBody = "<ns:ListFsiInternetInfo xmlns:ns='http://service.food.openapi.ubizvalley.com'>" +
									"<ns:uk>{0}</ns:uk>" + // 변수: 단말기 Unique값[필수]
									"<ns:frnum>{1}</ns:frnum>" + // 변수: 총건수중 시작건수[필수]
									"<ns:tonum>{2}</ns:tonum>" + // 변수: 충건수중 종료건수[필수]
									"<ns:gu_code>{3}</ns:gu_code>" + // 변수: 구코드
									"<ns:sname>{4}</ns:sname>" + // 변수: 업소명검색
									"</ns:ListFsiInternetInfo>";
					break;
				case "ListFsiMbFood":
					soap.Name = "ListFsiMbFood";
					soap.Description = "모범음식점 정보조회";
					soap.SoapBody = "<ns:ListFsiMbFood xmlns:ns='http://service.food.openapi.ubizvalley.com'>" +
									"<ns:uk>{0}</ns:uk>" + // 변수: 단말기 Unique값[필수]
									"<ns:gu_code>{1}</ns:gu_code>" + // 변수: 구코드
									"<ns:sname>{2}</ns:sname>" + // 변수: 업소명검색
									"</ns:ListFsiMbFood>";
					break;
				case "ListFsiSafeEatInfo":
					soap.Name = "ListFsiSafeEatInfo";
					soap.Description = "서울안심먹거리 정보조회";
					soap.SoapBody = "<ns:ListFsiSafeEatInfo xmlns:ns='http://service.food.openapi.ubizvalley.com'>" +
									"<ns:uk>{0}</ns:uk>" + // 변수: 단말기 Unique값[필수]
									"<ns:ctf_type>{1}</ns:ctf_type>" + // 변수: 안심먹거리 분류코드
									"<ns:ctf_gu>{2}</ns:ctf_gu>" + // 변수: 구코드
									"<ns:sname>{3}</ns:sname>" + // 변수: 업소명검색
									"</ns:ListFsiSafeEatInfo>";
					break;
				case "ListFsiUnfitFoodCode":
					soap.Name = "ListFsiUnfitFoodCode";
					soap.Description = "부적합식품정보 코드조회";
					soap.SoapBody = "<ns:ListFsiUnfitFoodCode xmlns:ns='http://service.food.openapi.ubizvalley.com'>" +
									"<ns:uk>{0}</ns:uk>" + // 변수: 단말기 Unique값[필수]
									"<ns:lev>{1}</ns:lev>" + // 변수: 분류 level
									"<ns:pid>{2}</ns:pid>" + // 변수: 상위코드
									"</ns:ListFsiUnfitFoodCode>";
					break;
				case "ListFsiUnfitFoodInfo":
					soap.Name = "ListFsiUnfitFoodInfo";
					soap.Description = "부적합식품정보 조회";
					soap.SoapBody = "<ns:ListFsiUnfitFoodInfo xmlns:ns='http://service.food.openapi.ubizvalley.com'>" +
									"<ns:uk>{0}</ns:uk>" + // 변수: 단말기 Unique값[필수]
									"<ns:frnum>{1}</ns:frnum>" + // 변수: 총건수중 시작건수[필수]
									"<ns:tonum>{2}</ns:tonum>" + // 변수: 충건수중 종료건수[필수]
									"<ns:lev>{3}</ns:lev>" + // 변수: 분류 level
									"<ns:pid>{4}</ns:pid>" + // 변수: 상위코드
									"<ns:at_fd_name>{5}</ns:at_fd_name>" + // 변수: 제품명
									"<ns:at_addr1>{6}</ns:at_addr1>" + // 변수: 제조원 소재지
									"<ns:at_maker>{7}</ns:at_maker>" + // 변수: 제조원(소분원,판매원)
									"<ns:at_yyyy>{8}</ns:at_yyyy>" + // 변수: 검사회보일
									"</ns:ListFsiUnfitFoodInfo>";
					break;
			}

			// 해당 서비스가 없는 경우
			if (String.IsNullOrEmpty(soap.Name))
				throw new Exception(name + " not found.");

			return soap;
		}

	}
}
